{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "023d32ca-6739-452a-97ee-162300c40bc7",
   "metadata": {},
   "source": [
    "### 导入依赖库"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "380cabe1-7759-435b-8c28-8f914f5d4d36",
   "metadata": {},
   "outputs": [],
   "source": [
    "from langchain_community.chat_models import ChatZhipuAI\n",
    "from langchain_core.messages import AIMessage, HumanMessage, SystemMessage\n",
    "from langchain.memory import ConversationBufferMemory\n",
    "from langchain.chains import ConversationChain"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "09fe4b6a-058e-4df4-aca4-23bfde233453",
   "metadata": {},
   "source": [
    "###  配置API密钥"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "7838abaa-78e7-494e-8399-12e238e1bdce",
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "os.environ[\"ZHIPUAI_API_KEY\"] = \"你的api key\""
   ]
  },
  {
   "cell_type": "markdown",
   "id": "71fceb9a-a0c4-4f7c-8202-06b5b6192ee3",
   "metadata": {},
   "source": [
    "### 初始化GLM-4-Flash模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "5b8298f3-235d-4711-af89-5877b242bf4e",
   "metadata": {},
   "outputs": [],
   "source": [
    "chat = ChatZhipuAI(\n",
    "    model=\"glm-4-flash\",\n",
    "    temperature=0.5,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ca415348-6fec-497c-a109-c522cb991b4a",
   "metadata": {},
   "source": [
    "### 单轮对话"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "19d0c64b-539c-4114-86b8-eb222a79e594",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "LangChain是一个构建和扩展自然语言处理应用的开源框架。\n"
     ]
    }
   ],
   "source": [
    "response = chat.invoke([\n",
    "    HumanMessage(content=\"用一句话解释langchain\")\n",
    "])\n",
    "print(response.content)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b02fe06e-30e9-436e-b5a9-c27ecb95e142",
   "metadata": {},
   "source": [
    "### 多轮对话（手动管理历史）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "e1b20319-33c2-4ede-965c-384c1436cf54",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "《肖申克的救赎》（The Shawshank Redemption）是一部1994年上映的美国剧情片，由弗兰克·德拉邦特（Frank Darabont）执导，根据斯蒂芬·金（Stephen King）的短篇小说《丽塔·海华丝及肖申克监狱的救赎》改编。这部电影以其深刻的主题、出色的表演和精湛的叙事技巧而闻名。\n",
      "\n",
      "以下是关于《肖申克的救赎》的一些详细信息：\n",
      "\n",
      "**剧情简介**：\n",
      "故事发生在1947年的美国，银行家安迪·杜弗雷恩（Andy Dufresne）被错误地定罪谋杀了他的妻子和她的情人，并被判处两个无期徒刑。他被送到了肖申克监狱，这是一所位于缅因州的环境恶劣的监狱。在那里，他遇到了各种各样的人物，包括监狱长和他的腐败官员，以及监狱里的其他囚犯。\n",
      "\n",
      "安迪在监狱中展现了他的智慧和坚韧不拔，他帮助其他囚犯改善生活条件，并秘密地教授他们阅读和写作。随着时间的推移，安迪和监狱中的一位老囚犯瑞德（Red）建立了深厚的友谊。瑞德成为了安迪的知己，并见证了他的希望和坚持。\n",
      "\n",
      "**主要角色**：\n",
      "- 安迪·杜弗雷恩（由蒂姆·罗宾斯饰演）：一个聪明、冷静、有毅力的银行家，被错误定罪。\n",
      "- 埃利斯·“瑞德”·雷丁（由摩根·弗里曼饰演）：一个经验丰富的囚犯，后来成为安迪的朋友。\n",
      "- 威尔·霍金斯（由鲍勃·冈顿饰演）：肖申克监狱的监狱长，一个腐败的官员。\n",
      "\n",
      "**电影特点**：\n",
      "- **主题**：《肖申克的救赎》探讨了希望、友谊、救赎和自由的主题。它展示了即使在最黑暗的环境中，人们仍然可以保持希望和尊严。\n",
      "- **叙事**：电影的叙事节奏缓慢而引人入胜，通过一系列的闪回和现实场景，逐渐揭示故事的细节。\n",
      "- **表演**：蒂姆·罗宾斯和摩根·弗里曼的表演被认为是电影史上的经典之一，他们的角色深入人心。\n",
      "- **音乐**：电影的音乐由托马斯·纽曼创作，以其悠扬的旋律和情感深度而著称。\n",
      "\n",
      "《肖申克的救赎》虽然在上映时并未获得巨大的商业成功，但随着时间的推移，它逐渐获得了广泛的认可和赞誉，被认为是电影史上最伟大的电影之一。\n"
     ]
    }
   ],
   "source": [
    "# 定义对话历史\n",
    "history = [\n",
    "    HumanMessage(content=\"推荐一部电影\"),\n",
    "    AIMessage(content=\"我推荐肖申克的救赎\"),\n",
    "    HumanMessage(content=\"请介绍这部电影\")\n",
    "]\n",
    "\n",
    "# 继续对话\n",
    "new_response = chat.invoke(history)\n",
    "print(new_response.content)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "67d2c121-6375-430c-9cef-ad60cd3b49b7",
   "metadata": {},
   "source": [
    "### 多轮对话（自动管理历史）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "d79d2be1-7b10-4b82-9f90-afb27c2d055c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "《肖申克的救赎》是一部改编自史蒂芬·金的短篇小说的电影，讲述了一个银行家安迪·杜佛兰在监狱中通过智慧和毅力最终获得自由的故事。\n",
      "--------------------------以下是第二轮对话---------------------------\n",
      "《肖申克的救赎》这样的电影通常被归类为励志片或剧情片，强调人性的光辉和希望的力量。以下是一些类似的电影：\n",
      "\n",
      "1. 《勇敢的心》（Braveheart）- 史蒂文·斯皮尔伯格执导，讲述苏格兰民族英雄威廉·华莱士的故事。\n",
      "\n",
      "2. 《辛德勒的名单》（Schindler's List）- 史蒂文·斯皮尔伯格执导，描述了二战期间德国商人奥斯卡·辛德勒如何拯救上千名犹太人的故事。\n",
      "\n",
      "3. 《美丽心灵》（A Beautiful Mind）- 根据诺贝尔经济学奖得主约翰·纳什的真实故事改编，讲述了他与精神疾病斗争并最终取得成功的故事。\n",
      "\n",
      "4. 《阿甘正传》（Forrest Gump）- 根据温斯顿·格鲁姆的同名小说改编，讲述了一个智力有限但心地善良的男子在美国历史中的奇遇。\n",
      "\n",
      "5. 《海上钢琴师》（The Legend of 1900）- 讲述了一个在船上出生并长大的钢琴天才的故事。\n",
      "\n",
      "6. 《当幸福来敲门》（The Pursuit of Happyness）- 威尔·史密斯主演，讲述了一个父亲如何在逆境中努力为儿子创造一个更好的生活。\n",
      "\n",
      "这些电影都通过主人公的奋斗和成长，展现了人性的坚韧和生命的价值。\n"
     ]
    }
   ],
   "source": [
    "# 创建带记忆的对话链\n",
    "memory = ConversationBufferMemory()\n",
    "conversation = ConversationChain(llm=chat, memory=memory)\n",
    "\n",
    "# 第一次对话\n",
    "print(conversation.run(\"用一句话介绍肖申克的救赎\")) \n",
    "\n",
    "print(\"--------------------------以下是第二轮对话---------------------------\")\n",
    "\n",
    "# 第二次对话（自动携带历史）\n",
    "print(conversation.run(\"类似的电影\"))  \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7008bd80-b31d-406c-b25c-74b6b09ca3f5",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
